/**
 * PanelReciboMatricula.java
 */

 /**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */

package adsec.presentacion;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.MaskFormatter;
import adsec.entidades.Anio;
import adsec.entidades.Estado;
import adsec.entidades.Estudiante;
import adsec.entidades.LlaveValor;
import adsec.entidades.ReciboMatricula;
import adsec.entidades.MatriculaGrid;
import adsec.entidades.Nivel;
import adsec.entidades.Permiso;
import adsec.negocios.AdministradorSeguridad;
import adsec.negocios.ControladoraAnio;
import adsec.negocios.ControladoraEstudiante;
import adsec.negocios.ControladoraReciboMatricula;
import adsec.negocios.ControladoraNivel;
import adsec.negocios.UtilidadesCapaNegocios;
import org.jdesktop.application.Action;


public class PanelReciboMatricula extends javax.swing.JPanel implements ListSelectionListener, ActionListener{

    private AdministradorSeguridad adminSeguridad;
    private ControladoraReciboMatricula controladoraMatricula;
    private ControladoraAnio controladoraAño;
    private ControladoraNivel controladoraNivel;
    private ControladoraEstudiante controladoraEstudiante;
    private Permiso permiso;
    private Estado estado;
    private int idRegistroMatricula;

    /** Creates new form PanelNivelSeccion */
    public PanelReciboMatricula() {
        initComponents();
        //this.iniciarPanelMatricula();
    }

    public void iniciarPanelMatricula(){
        this.adminSeguridad = AdministradorSeguridad.getInstancia();
        this.controladoraMatricula = new ControladoraReciboMatricula();
        this.controladoraEstudiante = new ControladoraEstudiante();
        this.controladoraAño = new ControladoraAnio();
        this.controladoraNivel = new ControladoraNivel();
        this.permiso = this.adminSeguridad.getPermiso(UtilidadesCapaNegocios.moduloReciboMatricula);
        this.estado = new Estado();
        this.idRegistroMatricula = -1;
        
        this.cargarComboBoxAño();
        this.cargarComboBoxDatosEstudiante();
        this.cargarComboBoxNivel();
        this.setHabilitarCampos(false);
        this.cbAño.setEnabled(true);
        this.habilitarBotonesIME(this.permiso.isInsertar(), false, false);
        this.habilitarAceptarCancelar(false);
    }//fin de iniciarPanelMatricula

    protected MaskFormatter createFormatter(String s) {
        MaskFormatter formatter = null;
        try {
            formatter = new MaskFormatter(s);
        } catch (java.text.ParseException exc) {
            System.err.println("formatter is bad: " + exc.getMessage());
            System.exit(-1);
        }
        return formatter;
    }

    /**
     ** Recibe un boolean para habilitar todos los campos de la pantalla
     ** o ya sea deshabilitarlos
     **/
    private void setHabilitarCampos(boolean habilitar){
        this.cbAño.setEnabled(habilitar);
        this.cbCedula.setEnabled(habilitar);
        this.cbNombreApellidos.setEnabled(habilitar);
        this.cbNivel.setEnabled(habilitar);
        this.txtTalonario.setEnabled(habilitar);
        this.txtRecibo.setEnabled(habilitar);
        this.txtMonto.setEnabled(habilitar);
        this.chbExonerado.setEnabled(habilitar);
    }//fin de setHabilitarCampos

    /**
     ** Habilita o deshabilita los botones insertar, modificar y eliminar
     **/
    private void habilitarBotonesIME(boolean insertar, boolean modificar, boolean eliminar){
        this.btnInsertar.setEnabled(insertar);
        this.btnModificar.setEnabled(modificar);
        this.btnEliminar.setEnabled(eliminar);
    }

    /**
     ** Habilita o deshabilita los botones aceptar y cancelar
     **/
    private void habilitarAceptarCancelar(boolean habilitar){
        this.btnAceptar.setEnabled(habilitar);
        this.btnCancelar.setEnabled(habilitar);
    }

    /**
     ** Limpia todos los campos de la pantalla
     **/
    private void limpiarCampos(){
        this.idRegistroMatricula = -1;
        this.cbAño.setSelectedIndex(-1);
        this.cbCedula.setSelectedIndex(-1);
        this.cbNivel.setSelectedIndex(-1);
        this.txtTalonario.setText("");
        this.txtRecibo.setText("");
        this.txtMonto.setText("");
        this.chbExonerado.setSelected(false);
        this.limpiarComboBoxAño();
        this.limpiarComboBoxNivel();
        this.limpiarComboBoxEstudiante();
    }//fin de limpiarCampos

    private void limpiarComboBoxAño(){
        ((DefaultComboBoxModel)this.cbAño.getModel()).removeAllElements();
    }

    private void limpiarComboBoxNivel(){
        ((DefaultComboBoxModel)this.cbNivel.getModel()).removeAllElements();
    }

    private void limpiarComboBoxEstudiante(){
        ((DefaultComboBoxModel)this.cbCedula.getModel()).removeAllElements();
        ((DefaultComboBoxModel)this.cbNombreApellidos.getModel()).removeAllElements();
    }

    private void cargarComboBoxDatosEstudiante(){
        cbCedula.removeActionListener(this);
        cbNombreApellidos.removeActionListener(this);
        LinkedList<Estudiante> lista = this.controladoraEstudiante.consultarEstudiantes();
        this.limpiarComboBoxEstudiante();
        DefaultComboBoxModel modCedula = (DefaultComboBoxModel)this.cbCedula.getModel();
        DefaultComboBoxModel modNombreApellidos = (DefaultComboBoxModel)this.cbNombreApellidos.getModel();
        modCedula.addElement("");
        modNombreApellidos.addElement("");
        Iterator<Estudiante> iterador = lista.iterator();
        while(iterador.hasNext()){
            Estudiante estudiante = iterador.next();
            modCedula.addElement(estudiante.getCedula());
            modNombreApellidos.addElement(estudiante.getNombre() + " " + estudiante.getApellidos());
        }//fin de while
        cbCedula.addActionListener(this);
        cbNombreApellidos.addActionListener(this);
    }//fin de cargarComboBoxDatosEstudiante

    private void cargarComboBoxAño(){
        LinkedList<Anio> lista = this.controladoraAño.consultarAnios();
        this.limpiarComboBoxAño();
        DefaultComboBoxModel modAño = (DefaultComboBoxModel)this.cbAño.getModel();
        modAño.addElement("");
        Iterator<Anio> iterador = lista.iterator();
        while(iterador.hasNext()){
            Anio año = iterador.next();
            modAño.addElement(año.getAnio());
        }//fin de while
    }//fin de cargarComboBoxAño

    private void cargarComboBoxNivel(){
        LinkedList<Nivel> lista = this.controladoraNivel.consultarNivelesTodos();
        this.limpiarComboBoxNivel();
        DefaultComboBoxModel modAño = (DefaultComboBoxModel)this.cbNivel.getModel();
        modAño.addElement("");
        Iterator<Nivel> iterador = lista.iterator();
        while(iterador.hasNext()){
            Nivel nivel = iterador.next();
            modAño.addElement(nivel.getNivel());
        }//fin de while
    }//fin de cargarComboBoxNivel

    /**
     ** Obtiene todos los datos del matricula y crea un objeto de tipo ReciboMatricula
     ** el cual es retornado
     ** @return Un objeto ReciboMatricula
     */
    public ReciboMatricula obtenerDatosMatricula(){
        ReciboMatricula matricula = new ReciboMatricula();
        matricula.setIdRegistro(this.idRegistroMatricula);
        matricula.setCedulaEstudiante(this.cbCedula.getSelectedItem().toString());
        int tmp = Integer.parseInt(this.cbAño.getSelectedItem().toString());
        matricula.setAnio(tmp);
        tmp = Integer.parseInt(this.cbNivel.getSelectedItem().toString());
        matricula.setNivel(tmp);
        matricula.setNumTalonario(Integer.parseInt(this.txtTalonario.getText().replaceAll(",", "")));
        matricula.setNumRecibo(Integer.parseInt(this.txtRecibo.getText().replaceAll(",", "")));
        boolean exonerado = this.chbExonerado.isSelected();
        matricula.setExoneracion(exonerado);
        if(!exonerado){
            matricula.setMonto(Integer.parseInt(this.txtMonto.getText().replaceAll(",", "")));
        }
        return matricula;
    }//fin de obtenerDatosMatricula

    private void insertarMatricula(){
        ReciboMatricula matricula = this.obtenerDatosMatricula();
        LinkedList<LlaveValor> listaLlaves = new LinkedList<LlaveValor>();
        listaLlaves.add(new LlaveValor(ReciboMatricula.anioNC, matricula.getAnio()));
        listaLlaves.add(new LlaveValor(ReciboMatricula.cedulaEstudianteNC, matricula.getCedulaEstudiante()));

        if(!UtilidadesCapaNegocios.existenLlaves(ReciboMatricula.nombreTabla, listaLlaves)){
            int resultado = this.controladoraMatricula.insertarMatricula(matricula);
            if(resultado == UtilidadesCapaNegocios.QUERY_OK){
                this.gridRecibos.getSelectionModel().clearSelection();
                JOptionPane.showMessageDialog(null, "El registro de matrícula fue insertado con éxito");
                this.volverConsultar();
            }//fin de if
            else{
                JOptionPane.showMessageDialog(null, UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloReciboMatricula, UtilidadesCapaNegocios.opInsertar), "ERROR", JOptionPane.ERROR_MESSAGE);
            }//fin de else
        }else{
            JOptionPane.showMessageDialog(null, "El registro de matrícula del año "
                    + matricula.getAnio() + " para el estudiante con cédula " + matricula.getCedulaEstudiante() + " ya existe", "ERROR", JOptionPane.ERROR_MESSAGE);
        }

    }//fin de insertarMatricula

    private void modificarMatricula(){
        ReciboMatricula matricula = this.obtenerDatosMatricula();
        int resultado = this.controladoraMatricula.modificarMatricula(matricula);
        if(resultado == UtilidadesCapaNegocios.QUERY_OK){
            this.gridRecibos.getSelectionModel().clearSelection();
            JOptionPane.showMessageDialog(null, "El registro de matrícula fue modificado con éxito");
            this.volverConsultar();
        }//fin de if
        else{
            JOptionPane.showMessageDialog(null, UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloReciboMatricula, UtilidadesCapaNegocios.opModificar), "ERROR", JOptionPane.ERROR_MESSAGE);
        }//fin de else

    }//fin de modificarMatricula

    private void eliminarMatricula(){
        int resultado = this.controladoraMatricula.eliminarMatricula(this.idRegistroMatricula);
        if(resultado == UtilidadesCapaNegocios.QUERY_OK){
            this.gridRecibos.getSelectionModel().clearSelection();
            JOptionPane.showMessageDialog(null, "El registro de matrícula fue eliminado con éxito");
            this.limpiarCampos();
            this.volverConsultar();
        }//fin de if
        else{
            JOptionPane.showMessageDialog(null, UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloReciboMatricula, UtilidadesCapaNegocios.opEliminar), "ERROR", JOptionPane.ERROR_MESSAGE);
        }//fin de else

    }//fin de modificarMatricula

    private void consultarMatricula(ReciboMatricula matricula){
        if(matricula != null){
            this.llenarCamposMatricula(matricula);
        }else{
            String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloReciboMatricula, UtilidadesCapaNegocios.opConsultar);
            JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
        }
    }//fin de consultarMatricula

    private void llenarCamposMatricula(ReciboMatricula matricula){
        //this.cbAño.setSelectedItem(matricula.getAño());
        this.idRegistroMatricula = matricula.getIdRegistro();
        this.cbNivel.setSelectedItem(matricula.getNivel());
        this.cbCedula.setSelectedItem(matricula.getCedulaEstudiante());
        this.txtTalonario.setText(Integer.toString(matricula.getNumTalonario()));
        this.txtRecibo.setText(Integer.toString(matricula.getNumRecibo()));
        this.txtMonto.setText(Integer.toString(matricula.getMonto()));
        this.chbExonerado.setSelected(matricula.isExoneracion());
        this.txtMonto.setEnabled(false);
        this.habilitarBotonesIME(permiso.isInsertar(), permiso.isModificar(), permiso.isEliminar());
    }

    private void volverConsultar(){
        int año = Integer.parseInt(this.cbAño.getSelectedItem().toString());
        this.estado.setEstadoActual(Estado.CONSULTAR);
        this.habilitarBotonesIME(permiso.isInsertar(), permiso.isModificar(), permiso.isEliminar());
        this.setHabilitarCampos(false);
        this.habilitarAceptarCancelar(false);
        this.cargarComboBoxAño();
        this.cbAño.setSelectedItem(año);
        this.cargarComboBoxNivel();
        this.cargarComboBoxDatosEstudiante();
        this.cargarGridMatriculas();
        this.cbAño.setEnabled(true);
    }//fin de volverConsultar

    private void cargarGridMatriculas(){
        this.habilitarBotonesIME(permiso.isInsertar(), false, false);
        this.limpiarGridMatriculas();
        LinkedList<MatriculaGrid> listaMatricula = null;
        if(cbAño.getSelectedIndex() > 0){
            int año = Integer.parseInt(cbAño.getSelectedItem().toString());
            listaMatricula = controladoraMatricula.consultarMatriculasGrid(año);
        }else{
            listaMatricula = controladoraMatricula.consultarMatriculasGridTodas();
        }

        Iterator<MatriculaGrid> iterador = listaMatricula.iterator();
        while(iterador.hasNext()){
            MatriculaGrid matricula = iterador.next();
            Object arregloDatos[] = new Object[5];
            arregloDatos[0] = matricula.getCedulaEstudiante();
            arregloDatos[1] = matricula.getNombre();
            arregloDatos[2] = matricula.getApellidos();
            arregloDatos[3] = matricula.getNivel();
            arregloDatos[4] = matricula.getMonto();
            ((DefaultTableModel)this.gridRecibos.getModel()).addRow(arregloDatos);
        }
    }//fin de cargarGridMatriculas
    
    private void limpiarGridMatriculas(){
        ((DefaultTableModel)this.gridRecibos.getModel()).setRowCount(0);
    }//fin de limpiarGridMatriculas

    public void valueChanged(ListSelectionEvent evento){
        int filas = ((DefaultTableModel)this.gridRecibos.getModel()).getRowCount();
        if(filas > 0 && estado.getEstadoActual() == Estado.CONSULTAR){
            int fila = this.gridRecibos.getSelectedRow();
            if(fila >= 0){
                ReciboMatricula matricula = this.controladoraMatricula.consultarMatriculaGrid(fila);
                this.consultarMatricula(matricula);
            }
        }//fin de if
    }//fin de método valueChanged

    public void actionPerformed(ActionEvent evento){
        JComboBox fuente = (JComboBox) evento.getSource();
        if(fuente == this.cbCedula){
            this.cbNombreApellidos.removeActionListener(this);
            this.cbNombreApellidos.setSelectedIndex(this.cbCedula.getSelectedIndex());
            this.cbNombreApellidos.addActionListener(this);
        }else{
            if(fuente == this.cbNombreApellidos){
                this.cbCedula.removeActionListener(this);
                this.cbCedula.setSelectedIndex(this.cbNombreApellidos.getSelectedIndex());
                this.cbCedula.addActionListener(this);
            }
        }

        if(fuente == this.cbAño){
            if(this.estado.getEstadoActual() == Estado.CONSULTAR){
                this.cargarGridMatriculas();
            }
        }
    }//fin de itemStateChanged

    private boolean validarDatos(){
        boolean resultado = true;
        try{
            int tmp = Integer.parseInt(this.txtTalonario.getText().trim().replaceAll(",", ""));
            resultado &= tmp > 0;
            tmp = Integer.parseInt(this.txtRecibo.getText().trim().replaceAll(",", ""));
            resultado &= tmp > 0;
            if(!this.chbExonerado.isSelected()){
                tmp = Integer.parseInt(this.txtMonto.getText().trim().replaceAll(",", ""));
                resultado &= tmp >= 0;
            }
        }catch(NumberFormatException e){
            resultado = false;
        }
        if(!resultado){
            JOptionPane.showMessageDialog(null, "Los números de talonario, recibo y monto de la matrícula\ndeben ser mayores a cero y sin decimales", "ERROR",JOptionPane.WARNING_MESSAGE);
        }
        return resultado;
    }//fin de validarDatos

    private boolean verificarDatosObligatorios(){
        boolean resultado = true;
        resultado &= !txtTalonario.getText().trim().isEmpty();
        resultado &= !txtRecibo.getText().trim().isEmpty();
        if(!this.chbExonerado.isSelected()){
            resultado &= !txtMonto.getText().isEmpty();
        }
        resultado &= !cbAño.getSelectedItem().toString().trim().isEmpty();
        resultado &= !cbNivel.getSelectedItem().toString().trim().isEmpty();
        resultado &= !cbCedula.getSelectedItem().toString().trim().isEmpty();
        if(!resultado){
            JOptionPane.showMessageDialog(null, "Todos los campos son obligatorios", "ERROR",JOptionPane.WARNING_MESSAGE);
        }
        return resultado;
    }//fin de verificarDatosObligatorios

    @Action
    public void insertandoMatricula() {
        this.estado.setEstadoActual(Estado.INSERTAR);
        this.limpiarCampos();
        this.setHabilitarCampos(true);
        this.habilitarBotonesIME(false, false, false);
        this.habilitarAceptarCancelar(true);
        this.cargarComboBoxAño();
        this.cargarComboBoxDatosEstudiante();
        this.cargarComboBoxNivel();
    }//fin de insertandoMatricula

    @Action
    public void modificandoMatricula() {
        this.estado.setEstadoActual(Estado.MODIFICAR);
        this.setHabilitarCampos(true);
        this.cbCedula.setEnabled(false);
        this.cbNombreApellidos.setEnabled(false);
        this.habilitarBotonesIME(false, false, false);
        this.habilitarAceptarCancelar(true);
    }//fin de insertandoMatricula

    @Action
    public void eliminandoMatricula() {
        Animador.animar();
        if(this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opEliminar, "ELIMINAR")){
            this.eliminarMatricula();
        }
        Animador.detenerAnimacion();
    }//fin de insertandoMatricula
    /**
     ** Muestra un mensaje de confirmación para que el usuario decida si realmente
     ** quiere llevar a cabo una operación
     ** @param operacion Código de operación realizada, tomada de UtilidadesCapaNegocios
     ** @param titulo Título a mostrar en el cuadro de confirmación
     ** @return Confirmación: true si el usuario acepta, false en otro caso.
     **/
    private boolean mostrarMensajeConfirmacion(int operacion,String titulo){
        boolean resultado = true;
        String mensaje = UtilidadesCapaNegocios.getMensajeConfirmacion(UtilidadesCapaNegocios.moduloReciboMatricula, operacion);
        int respuesta = JOptionPane.showConfirmDialog(null, mensaje,titulo ,JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
        resultado = respuesta == JOptionPane.OK_OPTION;
        return resultado;
    }//fin de mostrarMensajeConfirmacion

    @Action
    public void accionAceptar() {
        Animador.animar();
        switch(estado.getEstadoActual()){
            case Estado.INSERTAR:
                if(mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opInsertar, "INSERTAR") ){
                    if(verificarDatosObligatorios() && validarDatos()){
                        this.insertarMatricula();
                    }
                }
            break;
            case Estado.MODIFICAR:
                if(mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opModificar, "MODIFICAR") ){
                    if(verificarDatosObligatorios() && validarDatos()){
                        this.modificarMatricula();
                    }
                }
            break;
        }
        Animador.detenerAnimacion();
    }//fin de accionAceptar

    @Action
    public void accionCancelar() {
        this.limpiarCampos();
        this.volverConsultar();
    }//fin de accionCancelar
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        gridRecibos = new javax.swing.JTable();
        btnCancelar = new javax.swing.JButton();
        btnAceptar = new javax.swing.JButton();
        lbNivel = new javax.swing.JLabel();
        cbNivel = new javax.swing.JComboBox();
        lbRecibo = new javax.swing.JLabel();
        lbMonto = new javax.swing.JLabel();
        chbExonerado = new javax.swing.JCheckBox();
        cbCedula = new javax.swing.JComboBox();
        cbNombreApellidos = new javax.swing.JComboBox();
        lbEstudiante = new javax.swing.JLabel();
        btnModificar = new javax.swing.JButton();
        btnInsertar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        cbAño = new javax.swing.JComboBox();
        lbAño = new javax.swing.JLabel();
        lbTalonario = new javax.swing.JLabel();
        txtMonto = new javax.swing.JFormattedTextField(NumberFormat.getIntegerInstance());
        txtTalonario = new javax.swing.JFormattedTextField(NumberFormat.getIntegerInstance());
        txtRecibo = new javax.swing.JFormattedTextField(NumberFormat.getIntegerInstance());
        obli1 = new javax.swing.JLabel();
        obli2 = new javax.swing.JLabel();
        obli3 = new javax.swing.JLabel();
        obli4 = new javax.swing.JLabel();
        obli5 = new javax.swing.JLabel();
        obli6 = new javax.swing.JLabel();

        setName("Form"); // NOI18N
        setPreferredSize(new java.awt.Dimension(660, 582));

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        gridRecibos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Cédula", "Nombre", "Apellidos", "Nivel", "Monto"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        gridRecibos.setName("gridRecibos"); // NOI18N
        jScrollPane1.setViewportView(gridRecibos);
        gridRecibos.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        gridRecibos.getSelectionModel().addListSelectionListener(this);

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getActionMap(PanelReciboMatricula.class, this);
        btnCancelar.setAction(actionMap.get("accionCancelar")); // NOI18N
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getResourceMap(PanelReciboMatricula.class);
        btnCancelar.setText(resourceMap.getString("btnCancelar.text")); // NOI18N
        btnCancelar.setName("btnCancelar"); // NOI18N

        btnAceptar.setAction(actionMap.get("accionAceptar")); // NOI18N
        btnAceptar.setText(resourceMap.getString("btnAceptar.text")); // NOI18N
        btnAceptar.setName("btnAceptar"); // NOI18N

        lbNivel.setText(resourceMap.getString("lbNivel.text")); // NOI18N
        lbNivel.setName("lbNivel"); // NOI18N

        cbNivel.setName("cbNivel"); // NOI18N

        lbRecibo.setText(resourceMap.getString("lbRecibo.text")); // NOI18N
        lbRecibo.setName("lbRecibo"); // NOI18N

        lbMonto.setText(resourceMap.getString("lbMonto.text")); // NOI18N
        lbMonto.setName("lbMonto"); // NOI18N

        chbExonerado.setText(resourceMap.getString("chbExonerado.text")); // NOI18N
        chbExonerado.setName("chbExonerado"); // NOI18N
        chbExonerado.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                eventoCheckBoxExonerado(evt);
            }
        });

        cbCedula.setName("cbCedula"); // NOI18N

        cbNombreApellidos.setName("cbNombreApellidos"); // NOI18N

        lbEstudiante.setText(resourceMap.getString("lbEstudiante.text")); // NOI18N
        lbEstudiante.setName("lbEstudiante"); // NOI18N

        btnModificar.setAction(actionMap.get("modificandoMatricula")); // NOI18N
        btnModificar.setText(resourceMap.getString("btnModificar.text")); // NOI18N
        btnModificar.setName("btnModificar"); // NOI18N

        btnInsertar.setAction(actionMap.get("insertandoMatricula")); // NOI18N
        btnInsertar.setText(resourceMap.getString("btnInsertar.text")); // NOI18N
        btnInsertar.setName("btnInsertar"); // NOI18N

        btnEliminar.setAction(actionMap.get("eliminandoMatricula")); // NOI18N
        btnEliminar.setText(resourceMap.getString("btnEliminar.text")); // NOI18N
        btnEliminar.setName("btnEliminar"); // NOI18N

        cbAño.setName("cbAño"); // NOI18N

        lbAño.setText(resourceMap.getString("lbAño.text")); // NOI18N
        lbAño.setName("lbAño"); // NOI18N

        lbTalonario.setText(resourceMap.getString("lbTalonario.text")); // NOI18N
        lbTalonario.setName("lbTalonario"); // NOI18N

        txtMonto.setText(resourceMap.getString("txtMonto.text")); // NOI18N
        txtMonto.setName("txtMonto"); // NOI18N

        txtTalonario.setText(resourceMap.getString("txtTalonario.text")); // NOI18N
        txtTalonario.setName("txtTalonario"); // NOI18N

        txtRecibo.setName("txtRecibo"); // NOI18N

        obli1.setForeground(resourceMap.getColor("obli1.foreground")); // NOI18N
        obli1.setText(resourceMap.getString("obli1.text")); // NOI18N
        obli1.setName("obli1"); // NOI18N

        obli2.setForeground(resourceMap.getColor("obli2.foreground")); // NOI18N
        obli2.setText(resourceMap.getString("obli2.text")); // NOI18N
        obli2.setName("obli2"); // NOI18N

        obli3.setForeground(resourceMap.getColor("obli3.foreground")); // NOI18N
        obli3.setText(resourceMap.getString("obli3.text")); // NOI18N
        obli3.setName("obli3"); // NOI18N

        obli4.setForeground(resourceMap.getColor("obli4.foreground")); // NOI18N
        obli4.setText(resourceMap.getString("obli4.text")); // NOI18N
        obli4.setName("obli4"); // NOI18N

        obli5.setForeground(resourceMap.getColor("obli5.foreground")); // NOI18N
        obli5.setText(resourceMap.getString("obli5.text")); // NOI18N
        obli5.setName("obli5"); // NOI18N

        obli6.setForeground(resourceMap.getColor("obli6.foreground")); // NOI18N
        obli6.setText(resourceMap.getString("obli6.text")); // NOI18N
        obli6.setName("obli6"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 636, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(btnInsertar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnModificar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnEliminar))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(lbEstudiante)
                            .addComponent(lbAño)
                            .addComponent(lbTalonario)
                            .addComponent(lbNivel)
                            .addComponent(lbRecibo)
                            .addComponent(lbMonto))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(txtRecibo, javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(txtTalonario, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 73, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(obli5)
                                    .addComponent(obli4)))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(cbNivel, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(obli3))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(cbAño, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(obli1))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(cbCedula, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                        .addComponent(txtMonto, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(chbExonerado)))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(cbNombreApellidos, javax.swing.GroupLayout.PREFERRED_SIZE, 373, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(obli2))
                                    .addComponent(obli6)))))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(btnAceptar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnCancelar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEliminar)
                    .addComponent(btnModificar)
                    .addComponent(btnInsertar))
                .addGap(7, 7, 7)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cbAño, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbAño)
                    .addComponent(obli1))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cbCedula, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cbNombreApellidos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbEstudiante)
                    .addComponent(obli2))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cbNivel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbNivel)
                    .addComponent(obli3))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbTalonario)
                    .addComponent(txtTalonario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(obli4))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbRecibo)
                    .addComponent(txtRecibo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(obli5))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(txtMonto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbMonto)
                    .addComponent(chbExonerado)
                    .addComponent(obli6))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 241, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCancelar)
                    .addComponent(btnAceptar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        cbCedula.addActionListener(this);
        cbNombreApellidos.addActionListener(this);
        cbAño.addActionListener(this);
    }// </editor-fold>//GEN-END:initComponents

   
    private void eventoCheckBoxExonerado(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_eventoCheckBoxExonerado
        if (this.chbExonerado.isSelected()) {
            this.txtMonto.setEnabled(false);
        } else {
            this.txtMonto.setEnabled(true);
        }
}//GEN-LAST:event_eventoCheckBoxExonerado

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAceptar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnInsertar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JComboBox cbAño;
    private javax.swing.JComboBox cbCedula;
    private javax.swing.JComboBox cbNivel;
    private javax.swing.JComboBox cbNombreApellidos;
    private javax.swing.JCheckBox chbExonerado;
    private javax.swing.JTable gridRecibos;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lbAño;
    private javax.swing.JLabel lbEstudiante;
    private javax.swing.JLabel lbMonto;
    private javax.swing.JLabel lbNivel;
    private javax.swing.JLabel lbRecibo;
    private javax.swing.JLabel lbTalonario;
    private javax.swing.JLabel obli1;
    private javax.swing.JLabel obli2;
    private javax.swing.JLabel obli3;
    private javax.swing.JLabel obli4;
    private javax.swing.JLabel obli5;
    private javax.swing.JLabel obli6;
    private javax.swing.JFormattedTextField txtMonto;
    private javax.swing.JFormattedTextField txtRecibo;
    private javax.swing.JFormattedTextField txtTalonario;
    // End of variables declaration//GEN-END:variables

}
